/***************************************************************************
*                               Interfaces.cs
*                            -------------------
*   begin                : May 1, 2002
*   copyright            : (C) The RunUO Software Team
*   email                : info@runuo.com
*
*   $Id: Interfaces.cs 649 2010-12-26 05:18:57Z asayre $
*
***************************************************************************/

/***************************************************************************
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
*
***************************************************************************/

using System;
using System.Collections.Generic;
using Server.Mobiles;

namespace Server.Mobiles
{
    public interface IMount
    {
        Mobile Rider { get; set; }
        void OnRiderDamaged(int amount, Mobile from, bool willKill);
    }

    public interface IMountItem 
    {
        IMount Mount { get; }
    }
}

namespace Server
{
    public interface IVendor
    {
        bool OnBuyItems(Mobile from, List<BuyItemResponse> list);

        bool OnSellItems(Mobile from, List<SellItemResponse> list);

        DateTime LastRestock { get; set; }
        TimeSpan RestockDelay { get; }
        void Restock();
    }

    public interface IPoint2D
    {
        int X { get; }
        int Y { get; }
    }

    public interface IPoint3D : IPoint2D
    {
        int Z { get; }
    }

    public interface ICarvable
    {
        void Carve(Mobile from, Item item);
    }

    public interface IWeapon
    {
        int MaxRange { get; }
        void OnBeforeSwing(Mobile attacker, Mobile defender);

        TimeSpan OnSwing(Mobile attacker, Mobile defender);

        void GetStatusDamage(Mobile from, out int min, out int max);
    }

    public interface IHued
    {
        int HuedItemID { get; }
    }

    public interface ISpell
    {
        bool IsCasting { get; }
        void OnCasterHurt();

        void OnCasterKilled();

        void OnConnectionChanged();

        bool OnCasterMoving(Direction d);

        bool OnCasterEquiping(Item item);

        bool OnCasterUsingObject(object o);

        bool OnCastInTown(Region r);
    }

    public interface IParty
    {
        void OnStamChanged(Mobile m);

        void OnManaChanged(Mobile m);

        void OnStatsQuery(Mobile beholder, Mobile beheld);
    }

    public interface ISpawner
    {
        bool UnlinkOnTaming { get; }
        Point3D HomeLocation { get; }
        int HomeRange { get; }

        void Remove(ISpawnable spawn);
    }

    public interface ISpawnable : IEntity
    {
        void OnBeforeSpawn(Point3D location, Map map);

        void MoveToWorld(Point3D location, Map map);

        void OnAfterSpawn();

        ISpawner Spawner { get; set; }
    }
}